#include<stdio.h>
#include<string.h>
#include<signal.h>
#include<unistd.h>

//信号捕抓
void handler(int signo)
{
  while(1){
    printf("get a signo:%d\n",signo);
    sleep(1);
  }
}

int main()
{
  struct sigaction act;
  //初始化为0
  memset(&act,0,sizeof(act));
 
  
  act.sa_handler=handler;
  sigemptyset(&act.sa_mask);
  //把3号信号加进去
  //sigaddset(&act.sa_mask,3);

 // act.sa_handler=SIG_IGN;
  sigaction(2,&act,NULL);
  while(1){
    printf("hello tao!\n");
    sleep(1);
  }
  return 0;
}












//
//void show_pending(sigset_t *set)
//{
//  printf("show!\n");
//  int i=1;
//  for(i;i<=31;i++){
//    //member函数判断信号在不在
//    if(sigismember(set,i)){
//      printf("1");
//    }
//    else{
//      printf("0");
//     }
//   }
//  printf("\n");
//}
//
//int main()
//{
//  //sigset_t 是一个位图结构，不同操作系统实现不一样
//  //用户不能直接修改，要用特定函数
//  //set保存在用户栈中
//  sigset_t iset,oset;
//
//
//  //所有信号对应的bit清零
//  sigemptyset(&iset);
//  sigemptyset(&oset);
//
//  //把2号信号添加到iset里
//  sigaddset(&iset,2);
//
//  //屏蔽掉2号信号
//  //9号信号不可以给屏蔽
//  sigprocmask(SIG_SETMASK,&iset,&oset);
//
//  sigset_t pending;
//  int count=0;
//  while(1){
//    sigemptyset(&pending);
//    //获取pending位图
//    sigpending(&pending);
//    //显示  2号信号在pending位图由0变1
//    show_pending(&pending);
//    sleep(1);
//      
//    //恢复2号信号
//    count++;
//      if(count==12){
//       sigprocmask(SIG_SETMASK,&oset,NULL); 
//       printf("2号信号恢复!\n");
//      }
//  }
//
//  
//  return 0;
//}
